#!/usr/bin/env python
# -*- coding: latin-1 -*-

import gtk
import os, sys
import string

sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])),".."))
import Process

# VARIABLES POR DEFECTO

tamImg = 800
tamMin = 150
nombreMin = "p"

def alerta (cadena):
	dialogo = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, cadena)
	dialogo.run()
	dialogo.destroy()

def ClickAceptar(widget):
	archivos = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'].split("\n")
	for archivo in archivos:
		if archivo != "":
			if os.path.isdir(archivo):
				ProcesarDirectorio(archivo)
			else:
				ProcesarImagen(archivo)

	alerta("El proceso ha finalizado satisfactoriamente")
	gtk.main_quit()

def ProcesarDirectorio(directorio):
	archivos = os.listdir(directorio)
	for archivo in archivos:
		archivo = directorio + "/" + archivo
		if os.path.isdir(archivo):
			ProcesarDirectorio(archivo)
		else:
			ProcesarImagen(archivo)

def ProcesarImagen(archivo):
	program = "convert"

	if getExtension(archivo) == "JPG" or getExtension(archivo) == "PNG":
		image = gtk.gdk.pixbuf_new_from_file( archivo )
		intercambiar = False
		if cbIntercambiar.get_active() and image.get_height()>image.get_width():
			intercambiar = True

		# creamos miniatura 
		geo = ""

		if cbPorcentajeMin.get_active():
			geo = str(spinTamMin.get_value())+"%"
		else:
			if intercambiar:
				if rbTamAncho.get_active():
					geo = "x"+str(spinTamMin.get_value())
				else:
					geo = str(spinTamMin.get_value())+"x"
			else:
				if rbTamAncho.get_active():
					geo = str(spinTamMin.get_value())+"x"
				else:
					geo = "x"+str(spinTamMin.get_value())

		arguments = ["-resize", geo, archivo, getNombreMiniatura(archivo)]

		os.spawnvp(os.P_NOWAIT, program, (program,) +  tuple(arguments))


def getNombreMiniatura(archivo):
	trozos = archivo.split("/")
	i = 0
	miniatura = ""
	while i<len(trozos)-1:
		if trozos[i] != "":
			miniatura = miniatura  + "/" + trozos[i]
		i = i + 1

	miniatura = miniatura + "/" + entryNombre.get_text() + trozos[i]

	return miniatura

def getExtension(archivo):
	trozos = archivo.split(".")
	return string.upper(trozos[len(trozos)-1])

def ClickCancelar(widget):
	gtk.main_quit()


# PROGRAMA

if Process.verifyCommands("convert%ImageMagick")==False:
	sys.exit()

w = gtk.Window(gtk.WINDOW_TOPLEVEL)
w.set_title("Redimensionar imágenes")
w.set_border_width(20)

w.connect("destroy", gtk.mainquit) 
#l = gtk.Label(os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'])

# tabla de la miniatura

tableMin = gtk.Table(3, 3, False)
tableMin.set_border_width(10)

tableMin.set_row_spacings(8)
tableMin.set_col_spacings(8)

lTamMin = gtk.Label("Tamaño:")

tableMin.attach(lTamMin, 0, 1, 0, 1)

adjTamMin = gtk.Adjustment(1.0, 1.0, 999999.0, 1.0, 5.0, 0.0)
spinTamMin = gtk.SpinButton(adjTamMin, 0, 0)
spinTamMin.set_value(tamMin)

tableMin.attach(spinTamMin, 1, 2, 0, 1)

cbPorcentajeMin = gtk.CheckButton("%")
tableMin.attach(cbPorcentajeMin, 2, 3, 0, 1)

lAlto = gtk.Label("Proporcional al:")

tableMin.attach(lAlto, 0, 1, 1, 2)

boxTamRadio = gtk.HBox(False, 4)
boxTamRadio.set_border_width(4)
boxTamRadio.show()

rbTamAncho = gtk.RadioButton(None, "Ancho")
rbTamAncho.set_active(True)
rbTamAncho.show()
boxTamRadio.pack_start(rbTamAncho, True, True, 0)

rbTamAlto = gtk.RadioButton(rbTamAncho, "Alto")
rbTamAlto.show()
boxTamRadio.pack_start(rbTamAlto, True, True, 0)

tableMin.attach(boxTamRadio, 1, 3, 1, 2)

lNombreMin = gtk.Label("Texto al principio:")

tableMin.attach(lNombreMin, 0, 1, 2, 3)

entryNombre = gtk.Entry()
entryNombre.set_text(nombreMin)

tableMin.attach(entryNombre, 1, 3, 2, 3)

cbIntercambiar = gtk.CheckButton("Intercambiar tamaño en fotos verticales")

cbIntercambiar.set_active(True);

tableMin.attach(cbIntercambiar, 0, 3, 3, 4)


# botones

aligBotones = gtk.Alignment(1.0, 0.0)
boxBotones = gtk.HBox(True, 4)

bAceptar = gtk.Button("Aceptar", gtk.STOCK_OK)

bAceptar.connect("clicked", ClickAceptar)

boxBotones.pack_start(bAceptar, False, False, 0)

bCancelar = gtk.Button("Cancelar", gtk.STOCK_CANCEL)

bCancelar.connect("clicked", ClickCancelar)

boxBotones.pack_start(bCancelar, False, False, 0)

aligBotones.add(boxBotones)

tableMin.attach(aligBotones, 1, 2, 4, 5)

w.add(tableMin)
w.show_all()
gtk.main()
